home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
WORDMISC
/
MICROSPL.LZH
/
MDICT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1987-07-21
|
3KB
|
125 lines
/* MDICT: Main Dictionary processing for MicroSPELL 1.0
Spell Checker and Corrector
(C)opyright May 1987 by Daniel Lawrence
All Rights Reserved
*/
#include <stdio.h>
#include "dopt.h"
#include "dstruct.h"
#include "ddef.h"
#include "dsfx.h"
#if CMPRS
/* compression function globals */
char lastword[NSTRING]; /* last word from dictionary */
#endif
mopen() /* open the main dicionary */
{
/* if it is already open, close it down */
if (mdptr != NULL)
fclose(mdptr);
/* open op the main dictionary... */
if ((mdptr = popen(mdfile)) == NULL) {
printf("%%Can not find main dictionary\n");
return(FALSE);
}
return(TRUE);
}
mclose() /* close the dictionary down */
{
/* if it is already open, close it down */
if (mdptr != NULL)
fclose(mdptr);
mdptr = NULL;
}
char *nxtmword() /* get the next word from the main dictionary */
{
static char word[NSTRING]; /* word to return */
#if CMPRS
char *gcword();
#endif
/* is it already closed? */
if (mdptr == NULL)
return(hivalue);
/* get the next word */
#if CMPRS
if (gcword(word) == NULL) {
#else
if (fgets(word, NSTRING - 1, mdptr) == NULL) {
#endif
/* no more left!!!! close out */
fclose(mdptr);
mdptr = NULL;
return(hivalue);
}
/* all's well, dump the return and return the word */
#if CMPRS == 0
word[strlen(word) - 1] = 0;
#endif
return(word);
}
#if CMPRS
char *gcword(word) /* get the next compressed word */
char *word; /* buffer to place word in */
{
register int c; /* current character from file */
register char *wptr; /* ptr into word to return */
register char *lptr; /* pointer int last word */
int same; /* # of common characters from last word */
int suffix; /* index of common suffix */
int fgetc();
/* first grab the #same count */
same = fgetc(mdptr);
if (same == EOF) /* at EOF... return NULL */
return(NULL);
same -= 'A';
/* and copy things across */
wptr = word;
lptr = lastword;
while (same-- > 0)
*wptr++ = *lptr++;
c = fgetc(mdptr);
#if EBCDIC
/* opposite high bit flags */
while (c > 128) {
#else
while (c < 128) {
#endif
*wptr++ = c;
c = fgetc(mdptr);
}
*wptr = 0;
/* calculate the suffix to add... */
suffix = c & 127;
if (suffix != NSUFFIX)
strcpy(wptr, sfx[suffix]);
/* save the current uncompressed word */
strcpy(lastword, word);
/* and return the word */
return(word);
}
#endif